package cn.h8k.hj212.entity;

import java.util.Objects;

/**
 * HJ212协议消息实体类
 * 表示完整的HJ212协议消息，包含头部和数据部分
 */
public class Hj212Message {
    
    /**
     * 消息头部
     */
    private Hj212Header header;
    
    /**
     * 消息数据
     */
    private Hj212Data data;
    
    /**
     * CRC校验码
     */
    private String crc;
    
    /**
     * 默认构造函数
     */
    public Hj212Message() {
    }
    
    /**
     * 构造函数
     * @param header 消息头部
     * @param data 消息数据
     * @param crc CRC校验码
     */
    public Hj212Message(Hj212Header header, Hj212Data data, String crc) {
        this.header = header;
        this.data = data;
        this.crc = crc;
    }
    
    public Hj212Header getHeader() {
        return header;
    }
    
    public void setHeader(Hj212Header header) {
        this.header = header;
    }
    
    public Hj212Data getData() {
        return data;
    }
    
    public void setData(Hj212Data data) {
        this.data = data;
    }
    
    public String getCrc() {
        return crc;
    }
    
    public void setCrc(String crc) {
        this.crc = crc;
    }

    // 便捷的getter方法，用于快速访问常用字段

    /**
     * 获取请求编号
     * @return 请求编号
     */
    public String getQn() {
        return data != null ? data.getQn() : null;
    }

    /**
     * 获取系统编号
     * @return 系统编号
     */
    public String getSt() {
        return data != null ? data.getSt() : null;
    }

    /**
     * 获取命令编号
     * @return 命令编号
     */
    public String getCn() {
        return data != null ? data.getCn() : null;
    }

    /**
     * 获取访问密码
     * @return 访问密码
     */
    public String getPw() {
        return data != null ? data.getPw() : null;
    }

    /**
     * 获取设备唯一标识
     * @return 设备唯一标识
     */
    public String getMn() {
        return data != null ? data.getMn() : null;
    }

    /**
     * 获取数据标志
     * @return 数据标志
     */
    public String getFlag() {
        return data != null ? data.getFlag() : null;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Hj212Message that = (Hj212Message) o;
        return Objects.equals(header, that.header) &&
               Objects.equals(data, that.data) &&
               Objects.equals(crc, that.crc);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(header, data, crc);
    }
    
    @Override
    public String toString() {
        return "Hj212Message{" +
                "header=" + header +
                ", data=" + data +
                ", crc='" + crc + '\'' +
                '}';
    }
} 